查看原文
其他

BrainProducts recorder 远程采集脑电波实时数据

BrainProducts 是一家专门提供脑电图采集、放大、记录、分析服务的德国厂商。其recorder系列产品十分厉害,在临床中使用得十分广泛。recorder运行起来就是类似于这个样子: 



但是,对于我们程序开发人员来说,我们希望能够采集可操作的实时的脑波数据。可操作是指我们希望直接得到设备采集过来的实时原始数据,基于这些原始数据,我们可以做进一步的分析,比如使用人工神经网络对EGG进行建模等等。而刚好recorder系列产品又带了一个remote data access (RDA)模块,可以支持远程的实时数据访问。


RDA模块的网络结构图:

如上图所示,安装了Recorder记录软件的计算机就是一个RDA的服务端,RDA 客户端提供TCP/IP协议来访问服务端,读取实时数据。客户端可以使用 python,C,C++,matlab等主流语言来编写。

其实服务端就是维护了一个原生的TCP socket,然后我们在客户端编写socket程序 去访问 服务端就可以了。

打开RDA 服务端:

在recorder 软件里面,找到Configuration(配置)菜单, 点击子菜单 Preferences ,然后再preferences的对话面板选择remote data Access 栏目,点击那个enable remote data access 一下。效果如下图: 

打开服务端后,会打开两个服务端口:51234和51244。第一个端口用于发送16位的数据,第二个端口用户发送32位的数据。

配置客户端

配置好服务端后,接下来我们就要在客户端编写代码去访问服务端的51234端口或51244端口。 

首先我们需要与服务端建立一个TCP连接, 使用标准的socket即可完成。 

例如:




其中192.168.1.190是刚刚配置好的服务端的主机IP地址,该主机需要打开RDA模块才行。

连接好以后,客户端就会等待服务端发来的数据,每个数据叫做一个data block。客户端不需要发任何数据到服务端。 

下面我们介绍 服务端发来的data block的报文格式。

data block的报文格式

每一个data block都是以下面这种格式布局的:




首先是一个Header 头部区域,里面描述了后面实际数据的类型,长度,标识符。 

Header主要包含三个字段:

1. guid ,一个128比特的常数,用于唯一标识该data block

2. nSize, 描述了整个data block的大小。(1字节为单位)

3. nType,数据类型,描述后面data的是哪一类数据。

nType可以取四个值:

nType取值

含义

备注

1

RDA_MessageStart

启动消息

2

RDA_MessageData(for 16bit)

数据消息(从服务端51234端口发出)

3

RDA_MessageStop

停止消息

4

RDA_MessageData(for 32bit)

数据消息(从服务端51244端口发出)

RDA的四类Message 格式

RDA_MessageStart消息 
启动消息是在服务端切换到监听模式,同时有客户端登入进来的时候发送的。

RDA_MessageStart消息

主要包含如下信息: 
nChannels:通道数目 
dSamplingInterval:信号采用间隔,单位是uS,微秒。 
sChannelNames:各个通道的名称,每个通道名称没有”\0”隔开 
dResolutions:各个通道的精度(单位是uV)

RDA_MessageData消息

所有连接到服务端51234端口的客户端都会接受到这个消息。该消息的内容如下:

nBlock :从服务器开始监听,当前块的块号。 
nPoints:本数据块数据点或者采样点的个数 
nMarkers:本数据块中marker的个数 
nData[]:实际的数据点,每个数据点是16字节的有符号整数。 
Markers[]:RDA_Marker类型的数组,每个RDA_Marker的结构: 
nSize:本marker的字节大小 
nPosition:本marker对应的数据块在nData[]中的起点位置,从0开始。 
nPoints:本marker覆盖的采样点个数 
nChannel:本marker和那个Channel进行绑定 
nTypeDesc:描述性文本,无终结符”\0”

RDA_MessageStop

该消息只有Header,没有数据段,表示监听结束

RDA_MessageData32

和RDA_MessageData类似,唯一的区别在于:

RDA_MessageData32的采样点的数据字段将RDA_MessageData的nData[]替代为fData[],fData的每个元素是32位的 float数据

这四类数据看起来就像下面这样的: 


以上描述了通过RDA模块进行EGG实时数据采集的基本方法以及RDA模块的网络协议所使用的数据报文格式和含义,下面将RDA数据包所涉及的格式定义成相应的结构体。


文章来源: CSDN

作者:Icoding_F2014



免责声明:本公众号所有转载内容,转载仅作观点分享,不做商业用途,版权归原作者所有。




深圳市瀚翔生物医疗电子股份有限公司


长按二维码
关注我们




点击下方,进入原文阅读

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存